package com.core;

import io.vertx.core.AbstractVerticle;
import io.vertx.core.Promise;
import io.vertx.core.http.HttpServer;

/**
 * @author leonard
 * @date 2022/4/13
 * @Description Verticle 是由 Vert.x 部署和运行的代码块。
 * 默认情况一个 Vert.x 实例维护了N个 Event Loop 线程
 * 一个应用程序通常是由在同一个 Vert.x 实例中同时运行的许多 Verticle 实例组合而成。
 * 不同的 Verticle 实例通过向 Event Bus 上发送消息来相互通信
 */
public class MyVerticle extends AbstractVerticle {

  private HttpServer server;


  @Override
  public void start(Promise<Void> startPromise) throws Exception {
    System.out.println("当 Vert.x 部署 Verticle 时，它的 start 方法将被调用");
    System.out.println("io.vertx.core.Launcher=============>start");

    server = vertx.createHttpServer().requestHandler(req -> {
      req.response()
        .putHeader("content-type", "text/plain")
        .end("Hello from Vertx.x!");
    });

    server.listen(8877, ar -> {
      if (ar.succeeded()) {
        startPromise.complete();
      } else {
        startPromise.fail(ar.cause());
      }
    });


    super.start();
  }

  @Override
  public void stop() throws Exception {
    System.out.println("io.vertx.core.Launcher=============>stop");
    super.stop();
  }
}
